#![allow(dead_code)]

struct StrLrn {}

impl StrLrn {
    pub fn hello() {
        println!("String learning!");
    }
}

#[cfg(test)]
mod tests {
    #[test]
    fn if_let_test() {
        let s = Some('c');
        // NOTE: if let 模式匹配。相当于1个条件的match
        // 相当于 match s，如果是Some(i)，则执行println!("{}", i)
        // 理解为 if s is Some(i) then println!("{}", i)
        if let Some(i) = s {
            println!("i: {}", i);
        }
    }

    #[test]
    fn parse_test() {
        let s = "123";
        // NOTE: parse() 方法将字符串转换成数字
        // NOTE: parse() 方法返回的是 Result 类型
        // NOTE: parse() 方法只能用于数字类型
        let n: i32 = s.parse().unwrap();
        assert_eq!(123, n);
    }

    #[test]
    fn get_mut_test() {
        let mut str = String::from("hello");
        let new_str = str.get_mut(..4).map(|s| s.to_string() + "o add something!");
        // Convert &str to String
        assert_eq!(new_str, Some("hello add something!".to_string()));
    }
}
